package GestionBilleterie;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe permettant d'accéder aux vendeurs de la base de données
 * @author Julien Reze
 */
class VendeurBD {

    /**
     * Retourne tous les vendeurs de la base de données
     * @return la liste des vendeurs
     * @throws java.sql.SQLException
     */
    static List<Vendeur> readAllVendeur() throws SQLException {
        Statement st = BD.UserBD.getStatement();
        List<Vendeur> lesVendeurs=new ArrayList();
        ResultSet rs= st.executeQuery("SELECT * FROM vendeur");
        while( rs.next( )){
            Vendeur v=new Vendeur(rs.getInt("vend_id"),
                rs.getString("vend_log"),
                rs.getString("vend_nom"),
                rs.getString("vend_prenom"),
                rs.getBoolean("vend_admin"));
            lesVendeurs.add(v);
        }
        BD.UserBD.close(st);
        return lesVendeurs;
    }

    /**
     * Recherche un vendeur dans la base de données grâce à son id
     * @param idVendeur l'id du vendeur à recherché
     * @return le vendeur trouvé
     * @throws java.sql.SQLException
     */
    static Vendeur readVendeur(int idVendeur) throws SQLException {
        Statement st = BD.UserBD.getStatement();
        ResultSet rs= st.executeQuery("SELECT * FROM vendeur where vend_id="+idVendeur+"");
        if(!rs.next( )) return null;
        Vendeur v=new Vendeur(rs.getInt("vend_id"),
            rs.getString("vend_log"),
            rs.getString("vend_nom"),
            rs.getString("vend_prenom"),
            rs.getBoolean("vend_admin"));
        BD.UserBD.close(st);
        return v;
    }

    /**
     * Sauvegarde un vendeur en base de donnée
     * @param unVendeur le vendeur a sauvegardé
     * @return l'id du vendeur en base de donnée
     * @throws java.sql.SQLException
     */
    static int saveVendeur(Vendeur unVendeur) throws SQLException {
        Statement st = BD.UserBD.getStatement();
        int admin = 0;
        if(unVendeur.isAdmin()) admin=1;
        String rqt="INSERT INTO vendeur(vend_log,vend_nom,vend_prenom,vend_password,vend_admin) " +
                "VALUES('"+unVendeur.getLog()+"','"+unVendeur.getNom()+"','"+unVendeur.getPrenom()+"','"+unVendeur.getLog()+"','"+admin+"')";
        st.executeUpdate(rqt);
        BD.UserBD.close(st);
        System.out.println(unVendeur.getLog()+ "sauvegardé");
        List<Vendeur> l=readAllVendeur();
        return (l.get(l.size()-1)).getId();
    }

    /**
     * Met à jour un vendeur en base de donnée
     * @param unVendeur le vendeur a mettre à jour
     * @throws java.sql.SQLException
     */
    static void updateVendeur(Vendeur unVendeur) throws SQLException {
        Statement st = BD.UserBD.getStatement( );
        int admin = 0;
        if(unVendeur.isAdmin()) admin=1;
        String rqt="UPDATE vendeur " +
                "SET vend_nom='"+unVendeur.getNom()+"'," +
                "vend_prenom='"+unVendeur.getPrenom()+"'," +
                "vend_admin='"+admin+"'," +
                "vend_log='"+unVendeur.getLog()+"' " +
                "WHERE vend_id='"+unVendeur.getId()+"'";
        System.out.println(unVendeur.getLog()+ "mis à jour");
        st.executeUpdate(rqt);
        BD.UserBD.close(st);
    }

    /**
     * Retourne le vendeur correspondant au log si c'est un admin
     * @param log le log du vendeur
     * @param password le password du vendeur
     * @return le vendeur trouvé
     * @throws java.sql.SQLException
     */
    static Vendeur verifAdmin(String log, String password) throws SQLException {
        Statement st = BD.UserBD.getStatement();
        ResultSet rs= st.executeQuery("SELECT * FROM vendeur where vend_log='"+log+"'and vend_password='"+password+"'");
        Vendeur v = null;

        if(!rs.next()) return null;
        if(rs.getString("vend_log").equals(log) && rs.getString("vend_password").equals(password)&& rs.getBoolean("vend_admin")==true){
            v=new Vendeur(rs.getInt("vend_id"),
            rs.getString("vend_log"),
            rs.getString("vend_nom"),
            rs.getString("vend_prenom"),
            rs.getBoolean("vend_admin"));
        }
        BD.UserBD.close(st);
        return v;
    }

    /**
     * Retourne le vendeur correspondant au log si c'est un vendeur
     * @param log le log du vendeur
     * @param password le password du vendeur
     * @return le vendeur trouvé
     * @throws java.sql.SQLException
     */
    static Vendeur verifVendeur(String log, String password) throws SQLException {
        Statement st = BD.UserBD.getStatement();
        ResultSet rs= st.executeQuery("SELECT * FROM vendeur where vend_log='"+log+"'and vend_password='"+password+"'");
        Vendeur v = null;

        if(!rs.next()) return null;
        if(rs.getString("vend_log").equals(log) && rs.getString("vend_password").equals(password)){
            v=new Vendeur(rs.getInt("vend_id"),
            rs.getString("vend_log"),
            rs.getString("vend_nom"),
            rs.getString("vend_prenom"),
            rs.getBoolean("vend_admin"));
        }
        BD.UserBD.close(st);
        return v;
    }
}
